package com.sunshine.design.singleton;

/**
 * 双检锁/双重校验锁
 * 采用双锁机制，安全且在多线程情况下能保持高性能
 * @author weihong
 * @date 2021/1/7 9:44
 */
public class DclSingleton {
    /**
     * 让构造函数为 private，这样该类就不会被实例化
     */
    private DclSingleton() {
    }

    /**
     * 添加 volatile 确保对象的可见性、有序性
     */
    private static volatile DclSingleton singleton;

    public static DclSingleton getInstance(){
        if (null == singleton){
            synchronized (DclSingleton.class){
                singleton = new DclSingleton();
            }
        }
        return singleton;
    }
}
